﻿namespace System
{
    /// <summary>Аргумент события с двумя типизированными параметрами</summary>
    /// <typeparam name="TArgument1">Тип первого параметра</typeparam>
    /// <typeparam name="TArgument2">Тип второго параметра</typeparam>
    public class EventArgs<TArgument1, TArgument2> : EventArgs
    {
        /// <summary>Первый аргумент</summary>
        public TArgument1 Argument1 { get; set; }

        /// <summary>Второй аргумент</summary>
        public TArgument2 Argument2 { get; set; }

        /// <summary>Новый аргумент события с двумя параметрами</summary>
        [Diagnostics.DebuggerStepThrough]
        protected EventArgs() { }

        /// <summary>Новый аргумент события с двумя параметрами</summary>
        /// <param name="Argument1">Первый аргумент события</param>
        /// <param name="Argument2">Второй аргумент события</param>
        [Diagnostics.DebuggerStepThrough]
        public EventArgs(TArgument1 Argument1, TArgument2 Argument2)
        {
            this.Argument1 = Argument1;
            this.Argument2 = Argument2;
        }

        [Diagnostics.DebuggerStepThrough]
        public static implicit operator TArgument1(EventArgs<TArgument1, TArgument2> Args) { return Args.Argument1; }

        [Diagnostics.DebuggerStepThrough]
        public static implicit operator TArgument2(EventArgs<TArgument1, TArgument2> Args) { return Args.Argument2; }
    }

    public class EventArgs<TArgument1, TArgument2, TArgument3> : EventArgs
    {
        public TArgument1 Argument1 { get; set; }

        public TArgument2 Argument2 { get; set; }

        public TArgument3 Argument3 { get; set; }

        [Diagnostics.DebuggerStepThrough]
        public EventArgs() { }

        [Diagnostics.DebuggerStepThrough]
        public EventArgs(TArgument1 Argument1, TArgument2 Argument2, TArgument3 Argument3)
        {
            this.Argument1 = Argument1;
            this.Argument2 = Argument2;
            this.Argument3 = Argument3;
        }
    }
}